home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 2: CDPD 1 / Almathera Ten on Ten - Disc 2: CDPD 1.iso / pd / 001-025 / 002 / make / token.c < prev   
C/C++ Source or Header  |  1995-03-13  |  2KB  |  98 lines

  1. #include <stdio.h>
  2. #include <ctype.h>
  3. #include "make.h"
  4.  
  5. static char *stripwh ();
  6.  
  7. /*
  8.  * Get next token from the string.  Return a pointer to it, or NULL.
  9.  * Adjust pointer to point to next part of string.
  10.  * The string is modified.
  11.  * A token consists of any number of non-white characters.
  12.  */
  13.  
  14. char *token (strpp)
  15. char **strpp;
  16. {
  17.     register char *s;
  18.     register char *beg = NULL;
  19.  
  20.     DBUG_ENTER ("token");
  21.     DBUG_3 ("tok", "get next token from '%s'", *strpp);
  22.     (void) stripwh (strpp);
  23.     if (**strpp) {
  24.     beg = s = *strpp;
  25.     while (*s && !isspace (*s)) {
  26.         ++s;
  27.     }
  28.     if (*s) {
  29.         *s++ = '\0';
  30.     }
  31.     *strpp = s;
  32.     DBUG_3 ("tok", "found token '%s'", beg);
  33.     }
  34.     DBUG_RETURN (beg);
  35. }
  36.  
  37.  
  38. /*
  39.  * Parse character escape-sequences in a line of text.
  40.  *    <EscChar><EscChar> = <EscChar>
  41.  *    <EscChar>n = newline, and so on
  42.  *    <EscChar><char> = <char>
  43.  * The string is truncated at the first non-escaped occurance of 'comchar'.
  44.  */
  45.  
  46. void escape (str, comchar)
  47. char *str;
  48. char comchar;
  49. {
  50.     register char *d;
  51.     register char c;
  52.  
  53.     DBUG_ENTER ("escape");
  54.     for (d = str; *str && *str != comchar; ++str) {
  55.     if (*str == ESCCHAR && *(str + 1)) {
  56.         switch ((c = *++str)) {
  57.         case ESCCHAR: 
  58.             *d++ = ESCCHAR;
  59.             break;
  60.         case 'n': 
  61.             *d++ = '\n';
  62.             break;
  63.         case 'r': 
  64.             *d++ = '\r';
  65.             break;
  66.         case 't': 
  67.             *d++ = '\t';
  68.             break;
  69.         case 'b': 
  70.             *d++ = '\b';
  71.             break;
  72.         case 'f': 
  73.             *d++ = '\f';
  74.             break;
  75.         default: 
  76.             *d++ = c;
  77.             break;
  78.         }
  79.     } else {
  80.         *d++ = *str;
  81.     }
  82.     }
  83.     *d++ = 0;
  84.     DBUG_VOID_RETURN;
  85. }
  86.  
  87. static char *stripwh (strpp)
  88. char **strpp;
  89. {
  90.     register char *s;
  91.  
  92.     s = *strpp;
  93.     while (isspace (*s)) {
  94.     ++s;
  95.     }
  96.     return (*strpp = s);
  97. }
  98.